package com.cloud.custom.tasklist.web;

import java.util.ArrayList;
import java.util.List;

import com.cloud.custom.tasklist.bean.TaskListTabMenuBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.cloud.custom.common.result.Quokka;
import com.cloud.custom.common.utils.SessionHelper;
import com.cloud.custom.interfaces.FeignClientFreeflow;
import com.cloud.custom.tasklist.bean.MenuTabAuthority;
import com.cloud.custom.tasklist.bean.Part;
import com.cloud.custom.tasklist.entity.TaskListTab;
import com.cloud.custom.tasklist.entity.TaskListTabGroup;
import com.cloud.custom.tasklist.service.TaskListTabService;

@RestController
@RequestMapping("/custom/api/tasklist/tab")
public class TaskListTabController {

    @Autowired
    private TaskListTabService taskListTabService;

    @Autowired
    private FeignClientFreeflow feignFreeflowClient;

    @GetMapping("/listtree")
    public Quokka listTree() {
        return new Quokka(true, taskListTabService.listTree());
    }

    @RequestMapping("/tabmenus")
    public Quokka listTabMenus() {
        return new Quokka(true, taskListTabService.listTaskListTabMenus());
    }

    @RequestMapping("/listauthority")
    public Quokka listPartAuthority(long taskListId, long actDefId) {
        List<Part> parts = feignFreeflowClient.loadPartsByActDef(actDefId);
        return new Quokka(true, taskListTabService.listPartAuthority(taskListId, actDefId, parts));
    }

    @RequestMapping("/saveupdateauth")
    public Quokka saveUpdatePartAuth(@RequestBody List<MenuTabAuthority> parts, long actDefId, long taskListId) {
        taskListTabService.saveUpdatePartAuth(parts, actDefId, taskListId);
        return new Quokka(true);
    }

    @RequestMapping("/listbypart")
    public Quokka listTaskListTabPart(long taskListId, long actDefId) {
        List<Long> parts = new ArrayList<Long>();
        parts.add(0L);
        parts.addAll(SessionHelper.get().getParts());
        return new Quokka(true, taskListTabService.listTaskListPartByPart(taskListId, actDefId, parts));
    }

    @PostMapping("/group/saveupdate")
    public Quokka saveUpdateGroup(@RequestBody TaskListTabGroup group) {
        return new Quokka(true, taskListTabService.saveUpdateGroup(group));
    }

    @GetMapping("/group/delete")
    public Quokka deleteGroup(long groupId) {
        taskListTabService.deleteGroup(groupId);
        return new Quokka(true);
    }

    @PostMapping("saveupdate")
    public Quokka saveUpdateTab(@RequestBody TaskListTab tab) {
        return new Quokka(true, taskListTabService.saveUpdateTaskListTab(tab));
    }

    @GetMapping("delete")
    public Quokka deleteTab(long tabId) {
        return new Quokka(true, taskListTabService.deleteTab(tabId));
    }

    @GetMapping("load")
    public Quokka loadTab(long tabId) {
        return new Quokka(true, taskListTabService.loadTab(tabId));
    }

    @GetMapping("getTabList")
    public Quokka getTabList(Long taskListId, Long actDefId, Long partId) {
        return new Quokka(true, taskListTabService.getTabList(taskListId, actDefId, partId));
    }

    @GetMapping("getTabMenuList")
    public Quokka getTabMenuList(Long tabId, Long taskListId, Long actDefId, Long partId) {
        return new Quokka(true, taskListTabService.getTabMenuList(tabId, taskListId, actDefId, partId));
    }


    @PostMapping("saveTabPart")
    public Quokka saveTabPart(@RequestBody TaskListTabMenuBean param) {
        taskListTabService.saveTabPart(param);
        return new Quokka(true);
    }


    @PostMapping("saveTabMenuPart")
    public Quokka saveTabPartMenu(@RequestBody TaskListTabMenuBean param) {
        taskListTabService.saveTabPartMenu(param);
        return new Quokka(true);
    }
}
